﻿using System.Web.Mvc;
using OcenyOpisowe.Core.ModelMappers;
using OcenyOpisowe.ViewModels;
using OcenyOpisowe.Core.Repositories;

namespace OcenyOpisowe.Controllers
{
	/// <summary>
	/// Kontroler dla kont użytkowników.
	/// Pozwala na walidację danych użytkowników oraz na uruchomianie funkcjonalności odpowiedzialnych za
	/// logowanie i wylogowywanie użytkowników.
	/// </summary>
	public class AccountController : BaseController<ITeachersRepository>
	{
		#region Konstruktor klasy
		/// <summary>
		/// Inicjuje instancję kontrollera przyjmującego repozytorium danych specyficzne dla danego kontrollera.
		/// </summary>
		/// <param name="repository">Repozytorium służące do pobierania danych dla konkretnej strony.</param>
		/// <param name="mapper">Mapper dla obiektów bazodanowych.</param>
		protected AccountController(ITeachersRepository repository, IModelMapper mapper)
			: base(repository, mapper)
		{
		}
		#endregion

		#region Akcja LoggingIn
		/// <summary>
		/// Metoda inicjująca widok strony logowania do aplikacji.
		/// </summary>
		/// <returns>Widok logowania użytkownika.</returns>
		public ActionResult LoggingIn()
		{
			return View();
		}
		#endregion

		#region Akcja GetCurrentUserInfo
		/// <summary>
		/// Metoda pobierająca informacje o obecnie zalogowanym użytkowniku.
		/// Potrzebne jest to kontrolce wyświetlania danych użytkownika.
		/// </summary>
		/// <returns>Informacje o obecnie zalogowanym użytkowniku.</returns>
		[HttpPost]
		public ActionResult GetCurrentUserInfo()
		{
			if (User != null && User.Identity.IsAuthenticated)
			{
				Core.Data.Teacher currentlyLoggedTeacher = Repository.FindTeacherByLogin(User.Identity.Name);

				if(currentlyLoggedTeacher != null)
				{
					return new JsonResult
					       	{
					       		Data = new ApplicationAuthenticationModel
					       		       	{
					       		       		User = new AuthenticatedUserModel
					       		       		       	{
					       		       		       		FirstName = currentlyLoggedTeacher.FirstName,
					       		       		       		Surname = currentlyLoggedTeacher.Surname,
					       		       		       		Login = currentlyLoggedTeacher.Login,
					       		       		       		Identifier = currentlyLoggedTeacher.TeacherID
					       		       		       	}
					       		       	}
					       	};
				}
			}
			return new JsonResult
				    {
				       	Data = new ApplicationAuthenticationModel()
				    };
		}
		#endregion
	}
}
